<?php

/**
 * Description of Router
 *
 * @author prometheus
 */
class UAL_Task_Router extends UAL_Router
{
	public $xName = 'Feladatszintű útvonalkezelő';

	/**
	 * A taszkot (és ezt az útvonalválasztó-példányt) befogadó alkalmazás.
	 * @var Task_Application
	 */
	protected $parentApplication;

	protected $defaultTask = '';

	public function __construct(x10_Config $config=NULL, Task $parentApplication)
	{
		parent::__construct($config);

		$this->parentApplication = $parentApplication;
		$this->defaultTask = $this->config->getConfigKey('defaultTask');
		if (!$this->exists($this->defaultTask))
		{
			throw new UAL_E_Task_Router_DefaultNotExists($this->defaultTask);
		}
	}

	public function getClassNameFor($itemName)
	{
		return $this->parentApplication->getStdTaskClassName($itemName);
	}

	public function shiftQueue()
	{
		$queue = parent::shiftQueue();
		if (empty($queue))
		{
			$queue = $this->defaultTask;
			$this->shifted = $queue;
		}
		return $queue;
	}

	public function handle()
	{
		$itemName = $this->shiftQueue();
		if (!empty($itemName))
		{
			$className = $this->getClassNameFor($itemName);
			if (!class_exists($className))
			{
				if ($this->mode == 'strict')
				{
					$this->parentApplication->reportStatus('A(z) "'.$this->parentApplication->getConfig()->getConfigKey('routerItemName').'" alkalmazás "'.$itemName.'" nevű feladata nem található a rendszerben - sajnáljuk.', Application::HTTP_NOT_FOUND);
					return;
				}
				$itemName = $this->defaultTask;
				$className = $this->getClassNameFor($this->defaultTask);
				$this->cancelOperation();
			}
		}
//		else
//		{
//			$itemName = $this->defaultTask;
//			$className = $this->getClassNameFor($this->defaultTask);
//		}

		$result = new $className();
		$result->getConfig()->setConfigKey('routerItemName', $itemName);
		return $result;
	}
}

?>